(for Internet Explorer)
Function  AddLastOfFileName( BasePath as string, AddName as string ) as string
(src)
ファイルパスの最後(拡張子より前)に、文字列を追加します。 または拡張子を変更します。
【引数】
BasePath
AddName
追加前のファイルパス
追加する文字列
返り値
追加後のファイルパス
AddLastOfFileName( "file.txt", "123" ) = "file123.txt"
サンプル:
AddName に拡張子があったら、返り値の拡張子は、AddName の拡張子に変わります。
AddLastOfFileName( "file.txt", "123.html" ) = "file123.html"
AddLastOfFileName( "file.txt", ".html" ) = "file.html"
→ T_Path.vbs # [T_AddLastOfFileName]
テスト
関連
キーワード:
→ StrT_addLastOfFileName (clib)
AddLastOfFileName( "file.txt", "." ) = "file"
拡張子を無くす
AddLastOfFileName( path1, "."+g_fs.GetExtensionName( path2 ) )
拡張子を合わせる
Path の最後を区切り記号にします
(src)
Sub  CutLastOfFileName( in_out_Path as string, LastStr as string, Opt as integer )
ファイル名(拡張子を除く)の最後に、指定した文字列があれば削除します。
Dim  s
s = "File_Add.txt"
CutLastOfFileName  s, "_Add", Emtpy
'// s = "File.txt"
File_Add.txt
_Add
File.txt
呼び出し前の in_out_Path
LastStr
呼び出し後の in_out_Path
"File_Add.txt"
"_Add"
【引数】
in_out_Path
out_Obj
(入出力)パスやファイル名を含む文字列
(出力) 削除する内容の文字列
Opt
"File.txt"
"File_Add.txt"
"_Insert"
"File_Add.txt"
補足
拡張子も含めて削除するときは、
を使ってください。
関連
テスト
→ T_Str.vbs # [T_StrComp]
Empty または
サンプル
Function  StrCompLastOfFileName( Path as string, LastStr as string, Opt as integer ) as integer
(src)
ファイル名(拡張子を除く)の末尾を比較します。
【引数】
Path
LastStr
比較されるファイル名またはパス
Path の末尾と比較する文字列
Opt
Empty または
Str 引数の値
LastStr 引数の値
返り値
返り値
Path の末尾 = LastStr なら、0
"ABCDE.txt"
"CDE"
0 (=一致)
0以外(=異なる)
"ABC"
"ABCDE.txt"
0以外(=異なる)
"CDE.txt"
"ABCDE.txt"
関連
テスト
→ T_Str.vbs # [T_StrComp]
関連
Function  CutFragmentInURL( in_URL as string )
ファイル パスや URL に(# から始まる)フラグメントがあれば削除します。
Assert  CutFragmentInURL( "C:\File.txt#2" ) = "C:\File.txt"
【引数】
in_URL
返り値
(入出力)パスやファイル名を含む文字列
(出力) 削除する内容の文字列
サンプル
ソース
→ vbslib.vbs
Function  GetTagJumpParams( PathAndFragment as string ) as TagJumpParams
タグジャンプ形式の文字列(パス+行番号)を分解します。
サンプル:
Set jumps = GetTagJumpParams( "C:\folder\file1.txt(100)" )
'// jumps.Path = "C:\folder\file1.txt"
'// jumps.LineNum = 100
'// IsEmpty( jumps.Keyword )
関連
テスト
→ T_Path.vbs
→ T_EditorDiff_Manually.vbs
Class  TagJumpParams
  Public  Path     '// パス or ""、フル・パスとは限りません
  Public  LineNum  '// as integer or Empty
  Public  Keyword  '// as string or Empty
End Class
Set jumps = GetTagJumpParams( "file1.txt#Key" )
'// jumps.Path = "file1.txt"
'// jumps.Keyword = "Key"
'// IsEmpty( jumps.LineNum )
参考
タグジャンプ形式の文字列の詳細
GetTagJumpParams( "C:\folder\file1.txt(100)" ).Path
Set jumps = GetTagJumpParams( "file1.txt" )
'// jumps.Path = "file1.txt"
'// IsEmpty( jumps.LineNum )
'// IsEmpty( jumps.Keyword )
→ vbslib.vbs
ソース
Set jumps = GetTagJumpParams( "file${>#}1.txt" )
'// jumps.Path = "file#1.txt"
'// IsEmpty( jumps.LineNum )
'// IsEmpty( jumps.Keyword )
T_GetTagJumpParams
T_EditorManually
${>#} 以外の ${ } は
そのまま
Set jumps = GetTagJumpParams( "file1.txt#${\n}" )
'// jumps.Path = "file1.txt"
'// IsEmpty( jumps.LineNum )
'// jumps.Keyword = "${\n}"
${>#} は、# 文字になり、
# で Keyword の区切り
にはならない
Function  GetTagJumpPath( PathAndLine as string ) as string
タグジャンプ形式の文字列(パス+行番号)から、パスを取り出す。
サンプル:
path = GetTagJumpPath( "C:\folder\file1.txt(100)" )
path には、"C:\folder\file1.txt" が入ります。
(src)
関連
テスト
→ T_Path.vbs # GetTagJumpPath
廃止予定です。 GetTagJumpParams を使ってください。
Function  GetTagJumpLine( PathAndLine as string ) as integer
タグジャンプ形式の文字列(パス+行番号)から、行番号を取り出す。
サンプル:
line = GetTagJumpPath( "C:\folder\file1.txt(100)" )
line には、100 が入ります。
(src)
関連
テスト
→ T_Path.vbs # GetTagJumpLine
PathAndLine に行番号が無いときは、0 が返ります。
廃止予定です。 GetTagJumpParams を使ってください。
Function  IsMovablePathToPath( SrcPath as string, DstPath as string, IsDstFolder as boolean )
    as boolean
(src)
ファイルやフォルダーのパス SrcPath と DstPath の間で、移動ができるかどうかを返します。
【引数】
SrcPath
DstPath
移動元のファイルやフォルダーのパス
移動先のファイルやフォルダーのパス
IsDstFolder
DstPath がフォルダーかどうか
移動ができるかどうか
返り値
テスト
→ T_Path.vbs # [T_IsMovablePathToPath]
ドライブが異なっていたり、ネットワーク ドライブとローカル ドライブの違いがあると、移動できません。
ファイルのパスか、ファイルの内容に相当する文字列の抽象。
一部の vbslib の関数の引数にファイル名の代わりに指定することができるファイル・パス・オブジェクトです。
文字列や、スクリプトの中のコメントなどを、ファイルとして扱います。
次の関数のファイル名の代わりに指定することができます。
サンプル
Set root = LoadXML( new_FilePathForString( "<Root></Root>" ), Empty )
次の関数で FilePathClass のオブジェクトを生成することができます。
テスト
→ T_XML.vbs
T_LoadXML_PathObject
ソース
→ vbslib.vbs
文字列をファイルとして扱います
スクリプトの中のコメントをファイルとして扱います
入力ファイル・パスに相当する文字列を返します
次のプロパティがあります。
FilePathClass のオブジェクトを ReadFile 関数に渡し、その返り値を使ってファイルの内容を処理するコード
は共通にできるでしょう。
.Text
.FilePath
テキスト・ファイルの内容
ファイル・パス
関連
Set root = LoadXML( "sample.xml" ), Empty )
Set root = LoadXML( new_FilePathForFileInScript( Empty ), Empty )
ファイルの内容、または、それに相当する文字列を返します
Set root = LoadXML( new_FilePathForString( "<Root></Root>" ), Empty )
Function  new_FilePathForString( Text as string ) as FilePathClass
文字列をファイルとして扱うように、ファイル名の代わりに指定するオブジェクトを返します。
【引数】
Text
ファイルの内容
ファイル名の代わりに指定するオブジェクト
返り値
テスト
サンプル
ソース
→ T_XML.vbs
T_LoadXML_PathObject
→ vbslib.vbs
Function  new_FilePathForFileInScript( Parameter as Empty ) as FilePathClass
スクリプトの中のコメントをファイルとして扱うように、ファイル名の代わりに指定するオブジェクトを返します。
【引数】
Parameter
VBScript ファイルのパス、# 可能、Empty =
ファイル名の代わりに指定するオブジェクト
返り値
'------------------------------------------------------------[FileInScript.xml]
'<Root>
'<Tag out_path="_Out.txt"/>
'</Root>
'-----------------------------------------------------------[/FileInScript.xml]

Sub  Main( Opt, AppKey )
    CommandA_App  AppKey, new_FilePathForFileInScript( Empty )
End Sub


'--- start of vbslib include ------------------------------
  :   (vbslib をインクルードして main を呼び出すコード)
サンプル
関連
メイン・スクリプト・ファイル(WScript.ScriptFullName) に書かれた [FileInScript.*] がある行の次の行から、
[/FileInScript.*] がある行の前の行までを、ファイルの内容として扱います。 * は任意の文字列です。
スクリプト・ファイルの中にある XML データを CommandA に渡します。
テスト
→ T_FileInScript.vbs
T_new_FilePathForFileInScript
Sub  CommandA_App( AppKey, Path )
    Set root = LoadXML( Path, Empty )

    out_path = root.selectSingleNode( "./Tag" ).getAttribute( "out_path" )
    Set w_=AppKey.NewWritable( out_path ).Enable()
End Sub
上記スクリプトから呼び出す CommandA_App 関数の例:
ソース
→ vbslib.vbs
ファイルの内容(XML データ)の部分の行頭には、' が必要です。
参考
Path に、URL のように # を付けると、スクリプト・ファイルの中の行末にあるタグを検索して、
その中のデータをファイルとして扱います。
path_object = new_FilePathForFileInScript( "#FileInScript.xml" )
Function  GetFilePathString( Path as string or FilePathClass ) as string
入力ファイル・パスに相当する文字列を返します。
【引数】
Path
ファイル・パス・オブジェクト、または、入力ファイル・パス
入力ファイル・パスに相当する文字列
返り値
返り値は、データが存在するファイル・パスを表示するため、データ・ファイルがあるフォルダーの
パスを取得するために使うことができます。
返り値を、
など、ファイルの内容にアクセスする関数に渡すと、期待と異なるデータを入力
Path 引数が
の返り値を、GetFilePath の
してしまうことがあります。 たとえば、
引数に指定したときは、スクリプトの中のコメントではなく、スクリプト・ファイル全体を入力します。
ソース
→ vbslib.vbs
Path 引数が 文字列なら、その文字列を返します。
なら、WScript.ScriptFullName を返します。
その他
ワイルドカードを使って、ファイルパスを変更します。
旧仕様
Function  ArrayFromWildcard( WildcardPath as string ) as PathDictionaryClass of Nothing
ワイルドカードを展開します。 サブ フォルダーも検索します。
【引数】
ワイルドカードを含むパス。フォルダー指定も可。配列可
WildcardPath
    For Each  step_path  In  ArrayFromWildcard( "data\*" ).FilePaths
        echo  step_path
    Next
可能:
"*", "*.txt", "file*", "folder\*.txt", Array( "Fo\*.txt", "Fo\*.log" ),
"folder", "Debug\",  "Fo\*.txt | Fo\*.log",  "Fo\*.txt, Fo\*.log",
"NoWildcard.txt", "folder\*", "fo\*\file.txt", "*\file.txt", ".\file.txt"
関連
→ ファイル一覧
テスト
高速なフォルダ一覧
ファイル名やフォルダー名でソートされます。
サンプル
性能
不可能:
"folder*\file.txt"
ファイル・パスの配列を使ってコピーする
ソース
→ vbslib.vbs
返り値
of Nothing
→ T_Wildcard.vbs
T_ArrayFromWildcard1
が使えます。 例: "folder\*\back_up.txt", "folder\.\*.txt"
PathDictionaryClass のオブジェクトを指定したら、そのオブジェクトを返します。
ワイルドカードが、ファイル名やフォルダー名に相当する部分(もっとも右の \ の右側)に
あれば、サブ・フォルダーも検索します。
が優先されます。
ただし、WildcardPath 引数に指定した
サブ フォルダー記号が指定されていない( .\ も *\ もない)ときは、
指定したパスのファイルやフォルダーがないときはエラーにします(サブ フォルダー
記号 * や、ワイルドカードが無いときのみ)。
ファイルに対する処理の場合(ArrayFromWildcard の返り値の FilePaths プロパティ
などが参照される場合)、フォルダーのパスを指定すると、サブ・フォルダーにある
ファイルも検索します。
BasePath プロパティが指定フォルダーになる ArrayFromWildcard
と違い、BasePath プロパティは、カレント フォルダーになります。
path = GetFirst( ArrayFromWildcard( "Sub\File*.txt" ).FilePaths )
サンプル
ワイルドカードを1つだけ展開します。
参考
テスト
→ T_Wildcard.vbs # T_Wildcard_Speed
最も速いのは、
を使う方法です。
最も扱いやすいのは、
を使う方法です。
中間的なのは、
を使う方法です。
Sub  ExpandWildcard( WildcardPath as string, Flags as integer,
                     out_Folder as string, out_StepPaths as array of string )
ワイルドカードを展開します。 サブ・フォルダーも検索します。
【引数】
out_Folder
out_StepPaths
(出力) wildcard が含まれるフォルダのフル・パス
(出力) ワイルドカードにマッチした相対パスの配列
ワイルドカードを含むパス。フォルダ指定も可。配列可
WildcardPath
    Set c = g_VBS_Lib

    ExpandWildcard  "data\*",  c.File or c.SubFolder,  folder,  step_paths
    For Each  step_path  In  step_paths
        If InStr( step_path, "\_setup_" ) = 0 Then  '// 除外する場合
            echo  GetFullPath( step_path, folder )  '// g_fs.BuildPath は使わないこと
        End If
    Next
フラグの論理和
Flags
c.SubFolder
wildcard
f.txt
f.bin
f.txt
sub\f.txt
False
×
×
f.txt
True
×
*.txt
sub\abc.txt
×
×
True
×
sub\*
sub
True
True
×
×
×
×
×
×
関連
→ ファイル一覧
テスト
高速なフォルダ一覧
g_Vers("ExpandWildcard_Sort") = True
下記のように設定してから、ExpandWildcard を呼び出すと、ファイル名やフォルダー名で
ソートされます。 少し遅くなりますが、列挙されるファイルの順番がどのような環境でも
→ T_Wildcard.vbs # Main
下記の定数の or。 下記の c は、g_VBS_Lib の返り値。
ファイルを検索する
フォルダーを検索する
サブ・フォルダーも検索する。
out_Folder を out_StepPaths に含め、out_Folder = Empty にする
out_StepPaths の配列要素数を、WildcardPath に指定した配列
の要素数と同じにして、配列要素は、それぞれのワイルドカード
にマッチしたパスの配列にする
サンプル
性能
ファイル・パスの配列を使ってコピーする
指定したパスに見つからないときにもエラーにしない
ソース
→ vbslib.vbs
ソース
→ vbslib.vbs
ただし、WildcardPath 引数に指定した
が優先されます。
サブ・フォルダーも検索するかどうかは、ワールドカードが
指定されたかどうかなどによって決めます。
詳細は、
空のフォルダーを検索する。
out_StepPaths 引数に出力されるパスの末尾には \ が付きます。
sort_setting_back_up = g_Vers("ExpandWildcard_Sort")
g_Vers("ExpandWildcard_Sort") = True
    :
g_Vers("ExpandWildcard_Sort") = sort_setting_back_up
ワイルドカードにマッチするかどうか
で比較したソートを行います。 このとき、フォルダーの区切り記号は含まれません。
同じになります。 内部でそれぞれのフォルダーを展開するごとに
ExpandWildcard の内部データ構造
ExpandWildcardWorkClass
.items
.is_root_folder
.folder_path
.first_out_count
.out_fast_ubound
.sort_box
ArrayClass <ExpandWildcardItemClass>
boolean
string
integer
integer
ArrayClass <string>
.re
.re2
.IsSubFolder
re_type  (*1)
boolean
Empty
re2_type (*1)
(*1) re_type と re2_type は、以下の組み合わせのいずれかです。
re_type
re2_type
RegExp
RegExp
Empty
Empty
Empty
StrMatchKey
NameOnlyClass
WildcardPath 引数
"*"
ワイルドカードがない
"*" が1個のとき
* が2つのときか、? があるとき
work
reg_exp_dic
dictionary < (folder_path), ArrayClass <ExpandWildcardItemClass> >
out_StepPaths
array < File or Folder or (abs_path) >
// ExpandWildcard_sub 開始時の UBound( out_StepPaths )
// 実質的な UBound( out_StepPaths )
テスト
ソース
→ T_Wildcard.vbs
→ ToolsLib.vbs
Function  Expand_glob_Pattern( in_Pattern as string ) as array of string
を展開します。
【引数】
in_Pattern
globパターンの文字列
返り値
globパターンを展開したパスの配列
globパターン
T_glob_1
"*.txt"
"[1-3].txt"
"s/*.txt"
サンプル
in_Pattern 引数
ワイルドカードは、カレント フォルダーにあるファイルやフォルダーの名前に展開されます。
サブフォルダーは展開されません。
展開結果の例
"1.txt", "2.txt", "3.txt", "example.txt"
"s\example.txt"
"[12].txt"
"1.txt", "2.txt"
"[012].txt"
"1.txt", "2.txt" (0.txt がない場合)
"[!1].txt"
"1.txt", "2.txt", "3.txt"
"2.txt", "3.txt" (1.txt 以外の ?.txt)
"?.txt"
"1.txt", "2.txt", "3.txt"
"[!12].txt"
"3.txt" (1.txt, 2.txt 以外の ?.txt)
"s/v/*.txt"
"s/v\example.txt" (ワイルドカードの直前だけ\)
関連